<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>The source code</title>
  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
  <style type="text/css">
    .highlight { display: block; background-color: #ddd; }
  </style>
  <script type="text/javascript">
    function highlight() {
      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
    }
  </script>
</head>
<body onload="prettyPrint(); highlight();">
  <pre class="prettyprint lang-js">/*
 * Copyright (c) 2016 JUI All rights reserved.
 */

;(function () {

<span id='JUI-Validate'>    /**
</span>     * 验证
     * &lt;pre&gt;
&amp;lt;form id=&amp;quot;ff&amp;quot;&amp;gt;
    验证结果:
   &amp;lt;span id=&amp;quot;result&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; 
   &amp;lt;br /&amp;gt; 
   &amp;lt;table&amp;gt; 
    &amp;lt;tbody&amp;gt;
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证正整数:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t1&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId1&amp;quot; name=&amp;quot;name1&amp;quot; rules=&amp;quot;[{rule:{positiveInt:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;X 请输入整整数&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId1&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证自然数(长度4~10):&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t2&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId2&amp;quot; name=&amp;quot;name2&amp;quot; rules=&amp;quot;[{rule:{naturalNum:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入自然数&amp;#x27;}
			,{rule:{minLength:4,maxLength:10},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;长度必须为4~10&amp;#x27;}
			]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId2&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证正数:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t3&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId3&amp;quot; name=&amp;quot;name3&amp;quot; rules=&amp;quot;[{rule:{positiveNum:true,notNull:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入大于零的数&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId3&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证浮点数:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t4&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId4&amp;quot; rules=&amp;quot;[{rule:{floatNum:true,notNull:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入浮点数&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId4&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证正浮点数:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t5&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId5&amp;quot; rules=&amp;quot;[{rule:{positiveFloatNum:true,notNull:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入正浮点数&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId5&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证非负浮点数:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t6&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId6&amp;quot; rules=&amp;quot;[{rule:{notNegativeFloatNum:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入非负浮点数&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId6&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证邮箱:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t7&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId7&amp;quot; rules=&amp;quot;[{rule:{email:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入正确的邮箱&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId7&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证手机号:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t8&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId8&amp;quot; rules=&amp;quot;[{rule:{mobile:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入正确的手机号&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId8&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;验证电话:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t9&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId9&amp;quot; rules=&amp;quot;[{rule:{tel:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入正确的电话号&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId9&amp;quot;&amp;gt;&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
     &amp;lt;tr&amp;gt; 
      &amp;lt;td&amp;gt;passValidate=&amp;amp;quot;true&amp;amp;quot;属性:&amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;t9&amp;quot;&amp;gt; &amp;lt;input msgid=&amp;quot;msgId9&amp;quot; passvalidate=&amp;quot;true&amp;quot; rules=&amp;quot;[{rule:{tel:true},successMsg:&amp;#x27;√&amp;#x27;,errorMsg:&amp;#x27;请输入正确的电话号&amp;#x27;}]&amp;quot; /&amp;gt; &amp;lt;/td&amp;gt; 
      &amp;lt;td id=&amp;quot;msgId9&amp;quot;&amp;gt;passValidate=&amp;amp;quot;true&amp;amp;quot;可以跳过验证&amp;lt;/td&amp;gt; 
     &amp;lt;/tr&amp;gt; 
    &amp;lt;/tbody&amp;gt;
   &amp;lt;/table&amp;gt; 
  &amp;lt;/form&amp;gt; 
     * &lt;/pre&gt;
     * @class JUI.Validate
     * @extends JUI
     */
    JUI.Class('Validate', {
        OPTS: $.extend({
            rule: {}
            , msgId: ''
            , errorMsg: ''
            , successMsg: ''
            // 自定义校验方法
            , validateHandler: null
        }, JUIConfig.Validate)

<span id='JUI-Validate-method-init'>        /**
</span>         * 构造函数
         * @private
         */
        , init: function (opts) {
            this.opts = $.extend({}, this.OPTS, opts);
            this.setMsgId(this.opts.msgId);
        }
<span id='JUI-Validate-method-setMsgId'>        /**
</span>         * 设置提示信息的id
         */
        , setMsgId: function (id) {
            this.opts.msgId = id;
            this.$msgDiv = $('#' + this.opts.msgId);
        }
        , showErrorMsg: function (msg) {
            if (this.opts.errorClass) {
                this.$msgDiv.removeClass().addClass(this.opts.errorClass);
            }
            this.$msgDiv.html(msg || this.opts.errorMsg);
        }
        , showSuccessMsg: function (msg) {
            if (this.opts.successClass) {
                this.$msgDiv.removeClass().addClass(this.opts.successClass);
            }
            this.$msgDiv.html(msg || this.opts.successMsg);
        }
<span id='JUI-Validate-method-validate'>        /**
</span>         * 验证操作
         */
        , validate: function (val) {
            if (typeof this.opts.validateHandler === 'function') {
                var succ = this.opts.validateHandler(val);
                if (!succ) {
                    this.showErrorMsg();
                }
                return succ;
            }
            var rule = this.opts.rule;
            for (var key in rule) {
                // 检测空值
                var len = this.getValueLength(val);
                if (len === 0) {
                    if (this.opts.rule.notNull) {
                        this.showErrorMsg();
                        return false;
                    }
                    return true;
                }

                // 检测长度
                if (!this.validateLength(val)) {
                    return false;
                }

                var shouldValidate = rule[key];
                if (shouldValidate &amp;&amp; !this.validateItem(val, key)) {
                    return false;
                }
            }
            // 验证成功
            this.showSuccessMsg();
            return true;
        }
<span id='JUI-Validate-method-validateLength'>        /**
</span>         * 验证长度
         */
        , validateLength: function (val) {
            var len = this.getValueLength(val);
            var mixLen = this.opts.rule.minLength || -1;
            var maxLen = this.opts.rule.maxLength || -1;
            if (mixLen !== -1) {
                if (len &lt; mixLen) {
                    this.showErrorMsg();
                    return false;
                }
            }

            if (maxLen !== -1) {
                if (len &gt; maxLen) {
                    this.showErrorMsg();
                    return false;
                }
            }

            return true;
        }
<span id='JUI-Validate-method-validateItem'>        /**
</span>         * 验证单个项
         */
        , validateItem: function (val, item) {
            var validateMap = JUI.ValidateStore;
            var validateHandler = validateMap[item];
            if ($.isFunction(validateHandler)) {
                // 验证不通过
                if (!validateHandler(val)) {
                    this.showErrorMsg();
                    return false;
                }
            }
            return true;
        }
<span id='JUI-Validate-method-getValueLength'>        /**
</span>         * 返回字节长度,一个汉字返回2个长度
         */
        , getValueLength: function (value) {
            if (typeof value === 'undefined') {
                return 0;
            }
            // 如果是数组
            if ($.isArray(value)) {
                return value.length;
            }
            return (value + '').replace(/[^\x00-\xff]/g, &quot;**&quot;).length;
        }
    });

<span id='JUI-ValidateStore'>    /**
</span>     * @ignore
     */
    JUI.ValidateStore = (function () {
        var reg_positiveInt = /^[1-9]\d*$/
            , reg_naturalNum = /^(0|([1-9]\d*))$/
            , reg_positiveNum = /^(((0|([1-9]\d*))[\.]?[0-9]+)|[1-9])$/
            , reg_floatNum = /^-?[0-9]{1,4}([.]{1}[0-9]{1,})?$/
            , reg_positiveFloatNum = /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/
            , reg_notNegativeFloatNum = /^[0-9]{1,4}([.]{1}[0-9]{1,})?$/
            , reg_email = /^\s*[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]*)*@[a-zA-Z0-9\-]+([\.][a-zA-Z0-9\-]+)+\s*$/
            , reg_mobile = /^\s*(\+86)*0*1(3|5|8)\d{9}\s*$/
            , reg_tel = /\(?0\d{2,3}[)-]?\d{7,8}/

        return {
<span id='JUI-ValidateStore-method-positiveInt'>            /**
</span>             * 匹配正整数
             */
            positiveInt: function (val) {
                return reg_positiveInt.test(val);
            }
<span id='JUI-ValidateStore-method-naturalNum'>            /**
</span>             * 匹配自然数,0,1,2,3...
             */
            , naturalNum: function (val) {
                return reg_naturalNum.test(val);
            }
<span id='JUI-ValidateStore-method-positiveNum'>            /**
</span>             * 匹配正数
             */
            , positiveNum: function (val) {
                return reg_positiveNum.test(val);
            }
<span id='JUI-ValidateStore-method-floatNum'>            /**
</span>             * 匹配浮点数
             */
            , floatNum: function (val) {
                return reg_floatNum.test(val);
            }
<span id='JUI-ValidateStore-method-positiveFloatNum'>            /**
</span>             * 匹配正浮点数
             */
            , positiveFloatNum: function (val) {
                return reg_positiveFloatNum.test(val);
            }
<span id='JUI-ValidateStore-method-notNegativeFloatNum'>            /**
</span>             * 匹配非负浮点数（正浮点数 + 0）
             */
            , notNegativeFloatNum: function (val) {
                if (val === 0) {
                    return true;
                }
                return reg_notNegativeFloatNum.test(val);
            }
<span id='JUI-ValidateStore-method-email'>            /**
</span>             * 匹配邮箱
             */
            , email: function (val) {
                return reg_email.test(val);
            }
<span id='JUI-ValidateStore-method-mobile'>            /**
</span>             * 匹配手机号
             */
            , mobile: function (val) {
                return reg_mobile.test(val);
            }
<span id='JUI-ValidateStore-method-tel'>            /**
</span>             * 匹配联系电话
             * (010)88886666，或022-22334455，或02912345678
             */
            , tel: function (val) {
                return reg_tel.test(val);
            }
        };
    })();

})();</pre>
</body>
</html>
